/**
 * 图案数据迁移脚本
 * 用途：
 * 1. 将 category 从对象格式 {key: "animal"} 转换为字符串 "animal"
 * 2. 将 tags 从对象数组 [{key: "xxx"}] 转换为字符串数组 ["xxx"]
 * 3. 将所有图案的 duration 设置为 60
 * 
 * 在 HBuilderX 中运行方法：
 * 1. 右键点击此文件 -> 上传并运行
 * 2. 或者在云函数控制台中选择此文件运行
 */

'use strict';

const db = uniCloud.database()
const dbCmd = db.command
const patternCollection = db.collection('sh_pattern')

async function migratePatternData() {
	console.log('===== 开始迁移图案数据 =====')
	
	try {
		// 获取所有图案数据
		const result = await patternCollection.get()
		const patterns = result.data
		
		console.log(`共找到 ${patterns.length} 条图案数据`)
		
		let successCount = 0
		let errorCount = 0
		
		for (let i = 0; i < patterns.length; i++) {
			const pattern = patterns[i]
			console.log(`\n处理第 ${i + 1}/${patterns.length} 条: ${pattern._id}`)
			
			try {
				const updateData = {}
				
				// 1. 处理 category 字段
				if (pattern.category) {
					if (typeof pattern.category === 'object' && pattern.category.key) {
						// 从对象格式转换为字符串
						updateData.category = pattern.category.key
						console.log(`  - category: ${JSON.stringify(pattern.category)} -> "${updateData.category}"`)
					} else if (typeof pattern.category === 'string') {
						// 已经是字符串，不需要处理
						console.log(`  - category: 已经是字符串格式 "${pattern.category}"`)
					} else {
						// 未知格式，设置为默认值
						updateData.category = 'other'
						console.log(`  - category: 未知格式，设置为 "other"`)
					}
				} else {
					// category 为空，设置为默认值
					updateData.category = 'other'
					console.log(`  - category: 为空，设置为 "other"`)
				}
				
				// 2. 处理 tags 字段
				if (pattern.tags && Array.isArray(pattern.tags)) {
					if (pattern.tags.length > 0) {
						// 检查第一个元素的类型
						if (typeof pattern.tags[0] === 'object' && pattern.tags[0].key) {
							// 从对象数组转换为字符串数组
							updateData.tags = pattern.tags.map(tag => tag.key).filter(key => key)
							console.log(`  - tags: ${JSON.stringify(pattern.tags)} -> ${JSON.stringify(updateData.tags)}`)
						} else if (typeof pattern.tags[0] === 'string') {
							// 已经是字符串数组，不需要处理
							console.log(`  - tags: 已经是字符串数组格式 ${JSON.stringify(pattern.tags)}`)
						} else {
							// 未知格式，设置为空数组
							updateData.tags = []
							console.log(`  - tags: 未知格式，设置为 []`)
						}
					} else {
						// 空数组，不需要处理
						console.log(`  - tags: 已经是空数组`)
					}
				} else {
					// tags 不存在或不是数组，设置为空数组
					updateData.tags = []
					console.log(`  - tags: 不存在或格式错误，设置为 []`)
				}
				
				// 3. 设置 duration 为 60
				updateData.duration = 60
				console.log(`  - duration: ${pattern.duration || 'null'} -> 60`)
				
				// 4. 更新数据库
				await patternCollection.doc(pattern._id).update(updateData)
				successCount++
				console.log(`  ✅ 更新成功`)
				
			} catch (error) {
				errorCount++
				console.error(`  ❌ 更新失败:`, error)
			}
		}
		
		console.log('\n===== 迁移完成 =====')
		console.log(`成功: ${successCount} 条`)
		console.log(`失败: ${errorCount} 条`)
		console.log(`总计: ${patterns.length} 条`)
		
		return {
			success: true,
			total: patterns.length,
			successCount,
			errorCount
		}
		
	} catch (error) {
		console.error('===== 迁移失败 =====')
		console.error(error)
		return {
			success: false,
			error: error.message
		}
	}
}

// 导出为云函数入口，可以直接在 HBuilderX 中运行
exports.main = async (event, context) => {
	console.log('===== 开始执行图案数据迁移 =====')
	console.log('触发方式:', event.triggerType || '手动触发')
	
	const result = await migratePatternData()
	
	return result
}

module.exports = {
	migratePatternData,
	main: exports.main
}
